package stream;

import pojo.UserInfo;

import java.util.ArrayList;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 将List转为Map集合
 */
public class List2Map {
    public static void main(String[] args) {
        ArrayList<UserInfo> list = new ArrayList();
        list.add(new UserInfo(1, "张三", 1));
        list.add(new UserInfo(2, "李四", 2));
        list.add(new UserInfo(3, "王五", 3));
        list.add(new UserInfo(3, "赵六", 4));
        Map<Integer, UserInfo> userInfoMap = list.stream().collect(
                // Collectors.toMap参数是3个lambda表达式：生成键的映射函数、生成值的映射函数、合并函数（因为Map存储可能会重复，导致元素丢失，我们需要指定规则保留哪个）
                Collectors.toMap(
                        (UserInfo::getId), (userInfo -> userInfo), (k1, k2) -> {
                            // 合并函数，如果ID相同，保留isDelete的元素
                            if (k1.getIsDelete() > k2.getIsDelete()) {
                                return k1;
                            } else {
                                return k2;
                            }
                        })
        );
        userInfoMap.values().forEach(k -> {
            System.out.println(String.format("name=%s,isDelete=%s",k.getName(),k.getIsDelete()));
        });
    }

}
